home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1994 March / Internet Info CD-ROM (Walnut Creek) (March 1994).iso / networking / ip / ka9q / src890906.arc / NETROM.H < prev    next >
C/C++ Source or Header  |  1989-08-19  |  7KB  |  203 lines

  1. #ifndef    NR3HLEN
  2. #include "iface.h"
  3. #include "ax25.h"
  4.  
  5. /* net/rom support definitions
  6.  * Copyright 1989 by Daniel M. Frank, W9NK.  Permission granted for
  7.  * non-commercial distribution only.
  8.  */
  9.  
  10. #define NR3HLEN        15    /* length of a net/rom level 3 hdr, */
  11. #define NR3DLEN        241    /* max data size in net/rom l3 packet */
  12. #define NR3NODESIG    0xff    /* signature for nodes broadcast */
  13. #define NR3NODEHL    7    /* nodes bc header length */
  14.  
  15. #define NRNUMIFACE    10    /* number of interfaces associated */
  16.                 /* with net/rom network layer      */
  17. #define NRNUMCHAINS    17    /* number of chains in the */
  18.                 /* neighbor and route hash tables */
  19. #define NRRTDESTLEN    21    /* length of destination entry in */
  20.                 /* nodes broadcast */
  21. #define NRDESTPERPACK    11    /* maximum number of destinations per */
  22.                 /* nodes packet */
  23.  
  24. /* NET/ROM protocol numbers */
  25. #define NRPROTO_IP    0x0c
  26.  
  27. /* Internal representation of net/rom network layer header */
  28. struct nr3hdr {
  29.     struct ax25_addr source ;    /* callsign of origin node */
  30.     struct ax25_addr dest ;        /* callsign of destination node */
  31.     unsigned ttl ;                /* time-to-live */
  32. } ;
  33.  
  34. /* Internal representation of net/rom routing broadcast destination */
  35. /* entry */
  36. struct nr3dest {
  37.     struct ax25_addr dest ;        /* destination callsign */
  38.     char alias[7] ;            /* ident, upper case ASCII, blank-filled */
  39.     struct ax25_addr neighbor ;    /* best-quality neighbor */
  40.     unsigned quality ;        /* quality of route for this neighbor */
  41. } ;
  42.  
  43.  
  44. /* net/rom interface table entry */
  45. struct nriface {
  46.     struct iface *iface ;        /* pointer to ax.25 interface */
  47.     char alias[7] ;            /* alias for this interface's node */
  48.                     /* broadcasts */
  49.     unsigned quality ;        /* net/rom link quality estimate */
  50. } ;
  51.  
  52. /* net/rom neighbor table structure */
  53. struct nrnbr_tab {
  54.     struct nrnbr_tab *next ;    /* doubly linked list pointers */
  55.     struct nrnbr_tab *prev ;
  56.     char call[AXALEN*3] ;        /* call of neighbor + 2 digis max */
  57.     unsigned iface ;        /* offset of neighbor's port in */
  58.                     /* interface table */
  59.     unsigned refcnt ;        /* how many routes for this neighbor? */
  60. } ;
  61.  
  62. #define    NULLNTAB    (struct nrnbr_tab *)0
  63.  
  64.  
  65. /* A list of these structures is provided for each route table */
  66. /* entry.  They bind a destination to a neighbor node.  If the */
  67. /* list of bindings becomes empty, the route table entry is    */
  68. /* automatically deleted.                                       */
  69.  
  70. struct nr_bind {
  71.     struct nr_bind *next ;        /* doubly linked list */
  72.     struct nr_bind *prev ;
  73.     unsigned quality ;        /* quality estimate */
  74.     unsigned obsocnt ;        /* obsolescence count */
  75.     unsigned flags ;
  76. #define    NRB_PERMANENT    0x01        /* entry never times out */
  77. #define NRB_RECORDED    0x02        /* a "record route" entry */
  78.     struct nrnbr_tab *via ;        /* route goes via this neighbor */
  79. } ;
  80.  
  81. #define    NULLNRBIND    (struct nr_bind *)0
  82.  
  83.  
  84. /* net/rom routing table entry */
  85.  
  86. struct nrroute_tab {
  87.     struct nrroute_tab *next ;    /* doubly linked list pointers */
  88.     struct nrroute_tab *prev ;
  89.     char alias[7] ;            /* alias of node */
  90.     struct ax25_addr call ;        /* callsign of node */
  91.     unsigned num_routes ;        /* how many routes in bindings list? */
  92.     struct nr_bind *routes ;    /* list of neighbors */
  93.  
  94. } ;
  95.  
  96. #define    NULLNRRTAB    (struct nrroute_tab *)0
  97.  
  98.  
  99. /* The net/rom nodes broadcast filter structure */
  100. struct nrnf_tab {
  101.     struct nrnf_tab *next ;        /* doubly linked list */
  102.     struct nrnf_tab *prev ;
  103.     struct ax25_addr neighbor ;    /* call of neighbor to filter */
  104.     unsigned iface ;        /* filter on this interface */
  105. } ;
  106.  
  107. #define    NULLNRNFTAB    (struct nrnf_tab *)0
  108.  
  109. /* Structure for handling raw NET/ROM user sockets */
  110. struct raw_nr {
  111.     struct raw_nr *prev;
  112.     struct raw_nr *next;
  113.  
  114.     struct mbuf *rcvq;    /* receive queue */
  115.     char protocol;        /* Protocol */
  116. };
  117. #define    NULLRNR    ((struct raw_nr *)0)
  118.  
  119. /* The interface table */
  120. extern struct nriface Nrifaces[NRNUMIFACE] ;
  121.  
  122. /* How many interfaces are in use */
  123. extern unsigned Nr_numiface ;
  124.  
  125. /* The neighbor hash table (hashed on neighbor callsign) */
  126. extern struct nrnbr_tab *Nrnbr_tab[NRNUMCHAINS] ;
  127.  
  128. /* The routes hash table (hashed on destination callsign) */
  129. extern struct nrroute_tab *Nrroute_tab[NRNUMCHAINS] ;
  130.  
  131. /* The nodes broadcast filter table */
  132. extern struct nrnf_tab *Nrnf_tab[NRNUMCHAINS] ;
  133.  
  134. extern struct ax25_addr Nr_nodebc;
  135.  
  136. /* filter modes: */
  137. #define    NRNF_NOFILTER    0    /* don't filter */
  138. #define    NRNF_ACCEPT    1    /* accept broadcasts from stations in list */
  139. #define    NRNF_REJECT    2    /* reject broadcasts from stations in list */
  140.  
  141. /* The filter mode */
  142. extern unsigned Nr_nfmode ;
  143.  
  144. /* The time-to-live for net/rom network layer packets */
  145. extern unsigned short Nr_ttl ;
  146.  
  147. /* The obsolescence count initializer */
  148. extern unsigned Obso_init ;
  149.  
  150. /* The threshhold at which routes becoming obsolete are not broadcast */
  151. extern unsigned Obso_minbc ;
  152.  
  153. /* The quality threshhold below which routes in a broadcast will */
  154. /* be ignored */
  155. extern unsigned Nr_autofloor ;
  156.  
  157. /* Whether we want to broadcast the contents of our routing
  158.  * table, or just our own callsign and alias:
  159.  */
  160. extern int Nr_verbose ;
  161.  
  162. /* The maximum number of routes maintained for a destination. */
  163. /* If the list fills up, only the highest quality routes are  */
  164. /* kept.  This limiting is done to avoid possible over-use of */
  165. /* memory for routing tables in closely spaced net/rom networks. */
  166. extern unsigned Nr_maxroutes ;
  167.  
  168. /* The netrom pseudo-interface */
  169. extern struct iface *Nr_iface ;
  170.  
  171. /* Functions */
  172.  
  173. /* In nr3.c: */
  174. void del_rnr __ARGS((struct raw_nr *rpp));
  175. struct ax25_addr *find_nralias __ARGS((char *));
  176. struct nrroute_tab *find_nrroute __ARGS((struct ax25_addr *));
  177. void nr_bcnodes __ARGS((unsigned ifno));
  178. void nr_nodercv __ARGS((struct iface *iface,struct ax25_addr *source,struct mbuf *bp));
  179. int nr_nfadd __ARGS((struct ax25_addr *, unsigned));
  180. int nr_nfdrop __ARGS((struct ax25_addr *, unsigned));
  181. void nr_route __ARGS((struct mbuf *bp,struct ax25_cb *iaxp));
  182. int nr_routeadd __ARGS((char *, struct ax25_addr *, unsigned,
  183.     unsigned, char *, unsigned, unsigned));
  184. int nr_routedrop __ARGS((struct ax25_addr *, struct ax25_addr *, unsigned));
  185. void nr_sendraw __ARGS((struct ax25_addr *dest,unsigned family,unsigned proto,
  186.     struct mbuf *data));
  187. void nr3output __ARGS((struct ax25_addr *dest,struct mbuf *data));
  188. int16 nrhash __ARGS((struct ax25_addr *s));
  189. struct raw_nr *raw_nr __ARGS((char));
  190.  
  191. /* In nrcmd.c: */
  192. void donrdump __ARGS((struct nr4cb *cb));
  193.  
  194. /* In nrsubr.c: */
  195. struct mbuf *htonnr3 __ARGS((struct nr3hdr *));
  196. struct mbuf *htonnrdest __ARGS((struct nr3dest *));
  197. int ntohnr3 __ARGS((struct nr3hdr *, struct mbuf **));
  198. int ntohnrdest __ARGS((struct nr3dest *ds,struct mbuf **bpp));
  199.  
  200. #endif    /* NR3HLEN */
  201.  
  202.  
  203.